﻿

CREATE proc [dbo].[UpdateKIMData]
as
begin
	declare @RechtsFKey int,
			@rc int,
			@now datetime2(7) = sysdatetime(),
			@logText nvarchar(150)
	
	--EXECUTE AS LOGIN = 'TORPROFI\SQL_Developer';
	
	begin tran
	
	begin try
		;with KIM_plz
		as
		(
			select	p.EPLZ,
					p.LKZ,
					p.PLZ,
					p.Ort,
					p.Zone,
					p.Ortskennzahl,
					p.Bundesland
			from	TPDATA...POSTLEITZAHL p
		)
		merge into KIM.Postleitzahl t
		using KIM_plz s on
			t.EPLZ = s.EPLZ
		when not matched by target then
		insert (
				EPLZ,
				LKZ,
				Plz,
				Ort,
				Zone,
				Ortskennzahl,
				Bundesland
				)
		values (
				s.EPLZ,
				s.LKZ,
				s.Plz,
				s.Ort,
				s.Zone,
				s.Ortskennzahl,
				s.Bundesland
		)
		when matched then
		update
			set
				LKZ = s.LKZ,
				Plz	= s.Plz,
				Ort = s.Ort,
				Zone = s.Zone,
				Ortskennzahl = s.Ortskennzahl,
				Bundesland = s.Bundesland
		;
		
		;with KIM_Org 
		as
		(
			select	o.Abteilung,
					o.Adresse,
					o.EPLZ,
					o.FaxNr,
					o.KG,
					o.Kreditlimit,
					o.Kurzwahlspeicher,
					o.MB,
					o.Name,
					o.Notiz,
					o.OrgKey,
					o.OrgTS,
					o.Prefix,
					o.RechtsFKey,
					o.Straße,
					o.Suchbegriff,
					o.TelNr1,
					o.TelNr2,
					o.TochterVon,
					o.ZusätzeFW,
					o.e_Mail,
					o.export,
					o.Änderung
			from	tpdata...Organisation o
		)
		merge into kim.Organisation o
		using KIM_Org s on
			o.OrgKey = s.OrgKey
		when not matched by target then
		insert (
				Abteilung,
				Adresse,
				EPLZ,
				FaxNr,
				KG,
				Kreditlimit,
				Kurzwahlspeicher,
				MB,
				Name,
				Notiz,
				OrgKey,
				OrgTS,
				Prefix,
				RechtsFKey,
				Straße,
				Suchbegriff,
				TelNr1,
				TelNr2,
				TochterVon,
				ZusätzeFW,
				e_Mail,
				export,
				Änderung
		)
		values (
				s.Abteilung,
				s.Adresse,
				s.EPLZ,
				s.FaxNr,
				s.KG,
				s.Kreditlimit,
				s.Kurzwahlspeicher,
				s.MB,
				s.Name,
				s.Notiz,
				s.OrgKey,
				s.OrgTS,
				s.Prefix,
				s.RechtsFKey,
				s.Straße,
				s.Suchbegriff,
				s.TelNr1,
				s.TelNr2,
				s.TochterVon,
				s.ZusätzeFW,
				s.e_Mail,
				s.export,
				s.Änderung
				)
		when matched then
		update set
				Abteilung			= s.Abteilung,
				Adresse				= s.Adresse,
				EPLZ				= s.EPLZ,
				FaxNr				= s.FaxNr,
				KG					= s.KG,
				Kreditlimit			= s.Kreditlimit,
				Kurzwahlspeicher	= s.Kurzwahlspeicher,
				MB					= s.MB,
				Name				= s.Name,
				Notiz				= s.Notiz,
				OrgTS				= s.OrgTs,
				Prefix				= s.Prefix,
				RechtsFKey			= s.RechtsFKey,
				Straße				= s.Straße,
				Suchbegriff			= s.Suchbegriff,
				TelNr1				= s.TelNr1,
				TelNr2				= s.TelNr2,
				TochterVon			= s.TochterVon,
				ZusätzeFW			= s.ZusätzeFW,
				e_Mail				= s.e_Mail,
				export				= s.export,
				Änderung			= s.Änderung;
		
		set identity_insert  KIM.Person on
		;with KIM_Person
		as
		(
			select	p.PersKey,
					p.PersTS,
					p.Änderung,
					p.Zuname,
					p.Vorname,
					p.Geschlecht,
					p.TitelKey1,
					p.TitelKey2,
					p.Adresse,
					p.EPLZ,
					p.Straße,
					p.VorwahlKey,
					p.Mobil,
					p.PrivTelefon,
					p.PrivFax,
					p.MailingSperre,
					p.Notiz,
					p.Mitarbeiter,
					p.Kürzel,
					p.[eMail]
			from	tpdata...Person p
		)
		merge into KIM.Person t
		using KIM_Person s on
			s.PersKey = t.PersKey
		when not matched by target then
		insert	(
				PersKey,
				PersTS,
				Änderung,
				Zuname,
				Vorname,
				Geschlecht,
				TitelKey1,
				TitelKey2,
				Adresse,
				EPLZ,
				Straße,
				VorwahlKey,
				Mobil,
				PrivTelefon,
				PrivFax,
				MailingSperre,
				Notiz,
				Mitarbeiter,
				Kürzel,
				[eMail]
				)
		values	(
				s.PersKey,
				s.PersTS,
				s.Änderung,
				s.Zuname,
				s.Vorname,
				s.Geschlecht,
				s.TitelKey1,
				s.TitelKey2,
				s.Adresse,
				s.EPLZ,
				s.Straße,
				s.VorwahlKey,
				s.Mobil,
				s.PrivTelefon,
				s.PrivFax,
				s.MailingSperre,
				s.Notiz,
				s.Mitarbeiter,
				s.Kürzel,
				s.[eMail]
				)
		when matched then
		update
			set
				PersTS			= s.PersTS,
				Änderung		= s.Änderung,
				Zuname			= s.Zuname,
				Vorname			= s.Vorname,
				Geschlecht		= s.Geschlecht,
				TitelKey1		= s.TitelKey1,
				TitelKey2		= s.TitelKey2,
				Adresse			= s.Adresse,
				EPLZ			= s.EPLZ,
				Straße			= s.Straße,
				VorwahlKey		= s.VorwahlKey,
				Mobil			= s.Mobil,
				PrivTelefon		= s.PrivTelefon,
				PrivFax			= s.PrivFax,
				MailingSperre	= s.MailingSperre,
				Notiz			= s.Notiz,
				Mitarbeiter		= s.Mitarbeiter,
				Kürzel			= s.Kürzel,
				[eMail]			= s.[eMail];
		set identity_insert  KIM.Person off
		
		;with KIM_PersOrg
		as
		(
			select	p.OrgKey,
					p.PersKey,
					p.FunktionsKey,
					p.BerufstitelKey,
					p.Durchwahl,
					p.Fax,
					p.Tätigkeit
			from	tpdata...PersOrg p
		)				
		merge into KIM.PersOrg t
		using KIM_PersOrg s on
			s.OrgKey = t.OrgKey
			and s.PersKey = t.PersKey
		when not matched by target then
		insert	(
				OrgKey,
				PersKey,
				FunktionsKey,
				BerufstitelKey,
				Durchwahl,
				Fax,
				Tätigkeit
				)
		values	(
				s.OrgKey,
				s.PersKey,
				s.FunktionsKey,
				s.BerufstitelKey,
				s.Durchwahl,
				s.Fax,
				s.Tätigkeit
				)
		when matched then
		update
			set
				FunktionsKey	= s.FunktionsKey,
				BerufstitelKey	= s.BerufstitelKey,
				Durchwahl		= s.Durchwahl,
				Fax				= s.Fax,
				Tätigkeit		= s.Tätigkeit;
	end try
	begin catch
		goto WithError
	end	catch
	commit tran
	return 0

	
	
WithError:
	if @@TRANCOUNT > 0
	begin
		set @logText = 'UpdateKIMData: ' + ERROR_MESSAGE()
		exec @rc = dbo.SaveLog
			@UserID = 1,
			@LogType = 'S',
			@LogArea = 'SP',
			@LogDetails = @logText,
			@IsError = 1
		rollback tran
	end
	return -1

end
GO
GRANT EXECUTE
    ON OBJECT::[dbo].[UpdateKIMData] TO PUBLIC
    AS [dbo];

